关于linux:使用awk打印从第n个到最后一个的所有列 您所在的位置:网站首页 awk 输出最后一个字符 关于linux:使用awk打印从第n个到最后一个的所有列

关于linux:使用awk打印从第n个到最后一个的所有列

2023-06-03 17:28| 来源: 网络整理| 查看: 265

这条线有效,直到我在第二个字段中有空格。

1svn status | grep '\!' | gawk '{print $2;}' > removedProjs

有没有办法让awk打印出2美元或更高的价格? ($ 3,$ 4 ..直到我们没有列?)

我想我应该补充一点,我在Cygwin的Windows环境中这样做。

相关讨论 另外,grep | awk是反模式 - 你想要awk '/!/ { print $2 }' Unix"剪切"更容易...... svn status | grep '\!' | cut -d' ' -f2- > removedProjs awk中字段的打印剩余部分可能重复 @tripleee:我很高兴你提到这一点 - 我到处都看到它感到沮丧!

将打印所有但非常第一列:

1awk '{$1=""; print $0}' somefile

将打印除第一列以外的所有列:

1awk '{$1=$2=""; print $0}' somefile 相关讨论 谢谢,这最终工作 @zed非常好,只需确保在更改之前使用$1来处理您可能需要的任何内容。 陷阱:留下一个悬空的领先空间:( 我喜欢务实的做法。不需要使用cat,只需在awk命令后输入文件名即可。 cat somefile总是可以在awk命令末尾用替换 @raphinesse你可以用awk '{$1=""; print substr($0,2)}' input_filename > output_filename解决这个问题 这不适用于非空白分隔符,用空格替换它们。 另一件需要注意的事项(与默认分隔符一起使用时):将多个嵌入空间的跨度分别折叠到一个空间中。如果这是不受欢迎的或者甚至不是问题,这里有一个更简单,更容易推广的解决方案,可以从第3个字段获取所有内容 - 只需将{2}替换为{} - 封闭的前面字段数即可消除;改编自@ savvadia的答案:awk '{sub(/^[ ]*([^ ]+ +){2}/,""); print $0} 很好的答案。这将打印除最后一列之外的所有列:cat somefile | awk '{$NF=""; print $0}' 正是我需要的!现在,如果我想排除第1-8列,是否有办法在其中放置范围?而不是$1=$2=$3=$4=$5=$6=$7=$8="" 对于非空白分隔符,您可以指定输出字段分隔符(OFS),例如,逗号:awk -F, -vOFS=, '{$1=""; print $0}'最终会有一个初始分隔符($1仍然包含在内,就像一个空字符串一样)。您可以使用sed剥离它:awk -F, -vOFS=, '{$1=""; print $0}' | sed 's/^,//' 这个答案是不正确的。它只会用空格替换第一个和第二个字段。 对于多行和名称中的空格,请参阅答案:stackoverflow.com/a/49130247/3154883 @raphinesse - 在MobaXterm(cygwin衍生物)中尝试过,所以不确定它是否适用于所有情况,但awk '{$1=$2="\b"; print $0}' somefile会删除前导空格。也适用于awk '{$1=$2=$3=$4"\b"; print $0}' somefile 您也可以使用awk -F'-' 'BEGIN{OFS=FS};{$1=$2="\b"; print $0}'的非空白分隔符来完成此操作 AWK就像是一个过于文字的精灵,他给予了三个愿望 @JayRugMan,$1=$2="\b"技巧在视觉上很好用。但是,我发现如果你执行进一步的管道命令(例如cut),它们可能无法正常工作,因为\b将被传递。你可以用| tr '\b' '_'看到它。

有一个重复的问题,使用cut更简单的答案:

1 svn status |  grep '\!' | cut -d\  -f2-

-d指定分隔符(空格),-f指定列的列表(全部以第2列开头)

相关讨论 您也可以使用"-b"指定位置(从第N个字符开始)。 请注意,虽然这与awk版本执行相同的任务,但cut存在行缓冲问题,awk没有:stackoverflow.com/questions/14360640/ 很好,很简单,但有一个警告:awk处理多个相邻的空间字符。作为单个分隔符,而cut不;另外 - 虽然在手头的情况下这不是问题 - cut只接受单个文字字符。作为分隔符,而awk允许正则表达式。 基于此:stackoverflow.com/a/39217130/8852408,很可能这个解决方案效率不高。

您可以使用for循环遍历打印字段$ 2到$ NF(内置变量,表示行上的字段数)。

编辑: 由于"print"附加换行符,因此您需要缓冲结果:

1awk '{out=""; for(i=2;i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有